home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / glibc108.zip / glibc108 / sysdeps / mach / hurd / fcntlbits.h < prev    next >
C/C++ Source or Header  |  1993-12-13  |  6KB  |  175 lines

  1. /* O_*, F_*, FD_* bit values for GNU.
  2. Copyright (C) 1993 Free Software Foundation, Inc.
  3. This file is part of the GNU C Library.
  4.  
  5. The GNU C Library is free software; you can redistribute it and/or
  6. modify it under the terms of the GNU Library General Public License as
  7. published by the Free Software Foundation; either version 2 of the
  8. License, or (at your option) any later version.
  9.  
  10. The GNU C Library is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13. Library General Public License for more details.
  14.  
  15. You should have received a copy of the GNU Library General Public
  16. License along with the GNU C Library; see the file COPYING.LIB.  If
  17. not, write to the Free Software Foundation, Inc., 675 Mass Ave,
  18. Cambridge, MA 02139, USA.  */
  19.  
  20. #ifndef    _FCNTLBITS_H
  21.  
  22. #define    _FCNTLBITS_H    1
  23.  
  24.  
  25. /* File access modes.  These are understood by io servers; they can be
  26.    passed in `dir_pathtrans', and are returned by `io_get_openmodes'.
  27.    Consequently they can be passed to `open', `hurd_path_lookup', and
  28.    `path_lookup'; and are returned by `fcntl' with the F_GETFL command.  */
  29.  
  30. /* In GNU, read and write are bits (unlike BSD).  */
  31. #ifdef __USE_GNU
  32. #define    O_READ        O_RDONLY /* Open for reading.  */
  33. #define O_WRITE        O_WRONLY /* Open for writing.  */
  34. #define    O_EXEC        0x0004    /* Open for execution.  */
  35. #endif
  36. /* POSIX.1 standard names.  */
  37. #define    O_RDONLY    0x0001    /* Open read-only.  */
  38. #define    O_WRONLY    0x0002    /* Open write-only.  */
  39. #define    O_RDWR        (O_RDONLY|O_WRONLY) /* Open for reading and writing. */
  40. #define    O_ACCMODE    O_RDWR    /* Mask for file access modes.  */
  41.  
  42.  
  43.  
  44. /* File name translation flags.  These are understood by io servers;
  45.    they can be passed in `dir_pathtrans', and consequently to `open',
  46.    `hurd_path_lookup', and `path_lookup'.  */
  47.  
  48. #define    O_CREAT        0x0010    /* Create file if it doesn't exist.  */
  49. #define    O_EXCL        0x0020    /* Fail if file already exists.  */
  50. #ifdef __USE_GNU
  51. #define    O_NOLINK    0x0040    /* No name mappings on final component.  */
  52. #define    O_NOTRANS    0x0080    /* No translator on final component. */
  53. #endif
  54.  
  55.  
  56. /* File status flags.  These are understood by io servers; they can be
  57.    passed in `dir_pathtrans' and set or fetched with `io_*_openmodes'.
  58.    Consequently they can be passed to `open', `hurd_path_lookup',
  59.    `path_lookup', and `fcntl' with the F_SETFL command; and are returned
  60.    by `fcntl' with the F_GETFL command.  */
  61.  
  62. #define    O_APPEND    0x0100    /* Writes always append to the file.  */
  63. #define    O_ASYNC        0x0200    /* Send SIGIO to owner when data is ready.  */
  64. #define    O_FSYNC        0x0400    /* Synchronous writes.  */
  65. #define    O_SYNC        O_FSYNC
  66. #ifdef __USE_GNU
  67. #define    O_NOATIME    0x0800    /* Don't set access time on read by owner. */
  68. #endif
  69.  
  70.  
  71. /* The name O_NONBLOCK is unfortunately overloaded; it is both a file name
  72.    translation flag and a file status flag.  O_NDELAY is the deprecated BSD
  73.    name for the same flag, overloaded in the same way.
  74.  
  75.    When used in `dir_pathtrans' (and consequently `open', `hurd_path_lookup',
  76.    or `path_lookup'), O_NONBLOCK says the open should fail with EAGAIN
  77.    instead of blocking for any significant length of time (e.g., to wait for
  78.    DTR on a serial line).
  79.  
  80.    When used in `io_*_openmodes' (and consequently `fcntl' with the F_SETFL
  81.    command), the O_NONBLOCK flag means to do nonblocking i/o: any i/o
  82.    operation that would block for any significant length of time will instead
  83.    fail with EAGAIN.  */
  84.  
  85. #define    O_NONBLOCK    0x0008    /* Non-blocking open or non-blocking I/O.  */
  86. #ifdef __USE_BSD
  87. #define    O_NDELAY    O_NONBLOCK
  88. #endif
  89.  
  90.  
  91. #ifdef __USE_GNU
  92. /* Mask of bits which are understood by io servers.  */
  93. #define O_HURD        0xffff    /* XXX name? want this? */
  94. #endif
  95.  
  96.  
  97. /* Open-time action flags.  These are understood by `hurd_path_lookup'
  98.    and consequently by `open' and `path_lookup'.  They are not preserved
  99.    once the file has been opened.  */
  100.  
  101. #define    O_TRUNC        0x00010000 /* Truncate file to zero length.  */
  102. #ifdef    __USE_MISC
  103. #define    O_SHLOCK    0x00020000 /* Open with shared file lock.  */
  104. #define    O_EXLOCK    0x00040000 /* Open with shared exclusive lock.  */
  105. #endif
  106.  
  107.  
  108. /* Controlling terminal flags.  These are understood only by `open',
  109.    and are not preserved once the file has been opened.  */
  110.  
  111. #ifdef __USE_GNU
  112. #define    O_IGNORE_CTTY    0x00080000 /* Don't do any ctty magic at all.  */
  113. #endif
  114. /* `open' never assigns a controlling terminal in GNU.  */
  115. #define    O_NOCTTY    0    /* Don't assign a controlling terminal.  */
  116.  
  117.  
  118. #ifdef __USE_BSD
  119. /* Bits in the file status flags returned by F_GETFL.  */
  120. #define FREAD        O_RDONLY
  121. #define    FWRITE        O_WRONLY
  122.  
  123. /* Traditional BSD names the O_* bits.  */
  124. #define FASYNC        O_ASYNC
  125. #define FCREAT        O_CREAT
  126. #define FEXCL        O_EXCL
  127. #define FTRUNC        O_TRUNC
  128. #define FNOCTTY        O_NOCTTY
  129. #define FFSYNC        O_FSYNC
  130. #define FSYNC        O_SYNC
  131. #define FAPPEND        O_APPEND
  132. #define FNONBLOCK    O_NONBLOCK
  133. #define FNDELAY        O_NDELAY
  134. #endif
  135.  
  136.  
  137. /* Values for the second argument to `fcntl'.  */
  138. #define    F_DUPFD          0    /* Duplicate file descriptor.  */
  139. #define    F_GETFD        1    /* Get file descriptor flags.  */
  140. #define    F_SETFD        2    /* Set file descriptor flags.  */
  141. #define    F_GETFL        3    /* Get file status flags.  */
  142. #define    F_SETFL        4    /* Set file status flags.  */
  143. #ifdef __USE_BSD
  144. #define    F_GETOWN    5    /* Get owner (receiver of SIGIO).  */
  145. #define    F_SETOWN    6    /* Set owner (receiver of SIGIO).  */
  146. #endif
  147. #define    F_GETLK        7    /* Get record locking info.  */
  148. #define    F_SETLK        8    /* Set record locking info (non-blocking).  */
  149. #define    F_SETLKW    9    /* Set record locking info (blocking).  */
  150.  
  151. /* File descriptor flags used with F_GETFD and F_SETFD.  */
  152. #define    FD_CLOEXEC    1    /* Close on exec.  */
  153.  
  154.  
  155. #include <gnu/types.h>
  156.  
  157. /* The structure describing an advisory lock.  This is the type of the third
  158.    argument to `fcntl' for the F_GETLK, F_SETLK, and F_SETLKW requests.  */
  159. struct flock
  160.   {
  161.     int l_type;        /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
  162.     int l_whence;    /* Where `l_start' is relative to (like `lseek').  */
  163.     __off_t l_start;    /* Offset where the lock begins.  */
  164.     __off_t l_len;    /* Size of the locked area; zero means until EOF.  */
  165.     __pid_t l_pid;    /* Process holding the lock.  */
  166.   };
  167.  
  168. /* Values for the `l_type' field of a `struct flock'.  */
  169. #define    F_RDLCK    1    /* Read lock.  */
  170. #define    F_WRLCK    2    /* Write lock.  */
  171. #define    F_UNLCK    3    /* Remove lock.  */
  172.  
  173.  
  174. #endif    /* fcntlbits.h */
  175.